package io.github.wppli.infrastructure.persistent.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

import lombok.*;

/**
 * <p>
 * 
 * </p>
 *
 * @author lijiaqiang@ljq1024.cc
 * @since 2025-03-19
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName("product_order")
public class ProductOrder implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 自增ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户ID；微信分配的唯一ID编码
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 商品ID
     */
    @TableField("product_id")
    private Long productId;

    /**
     * 商品名称
     */
    @TableField("product_name")
    private String productName;

    /**
     * 订单编号
     */
    @TableField("order_id")
    private String orderId;

    /**
     * 下单时间
     */
    @TableField("order_time")
    private LocalDateTime orderTime;

    /**
     * 过期时间
     */
    @TableField("expire_time")
    private LocalDateTime expireTime;

    /**
     * 订单状态；0-创建完成、1-等待发货、2-发货完成、3-系统关单
     */
    @TableField("order_status")
    private Integer orderStatus;

    /**
     * 订单金额
     */
    @TableField("total_amount")
    private BigDecimal totalAmount;

    /**
     * 支付方式；0-微信支付
     */
    @TableField("pay_type")
    private Integer payType;

    /**
     * 支付地址；创建支付后，获得的URL地址
     */
    @TableField("pay_url")
    private String payUrl;

    /**
     * 支付金额；支付成功后，以回调信息更新金额
     */
    @TableField("pay_amount")
    private BigDecimal payAmount;

    /**
     * 交易单号；支付成功后，回调信息的交易单号
     */
    @TableField("transaction_id")
    private String transactionId;

    /**
     * 支付状态；0-等待支付、1-支付完成、2-支付失败、3-放弃支付
     */
    @TableField("pay_status")
    private Integer payStatus;

    /**
     * 支付时间
     */
    @TableField("pay_time")
    private Date payTime;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    private Date updateTime;


}
